package com.heima.home.util;

import java.util.HashMap;
import java.util.Map;

/**
 * 用户上下文工具类，用于在单个请求线程中存储和获取用户信息。
 * 基于ThreadLocal实现，确保线程安全。
 */
public class UserContext {

    // 创建一个ThreadLocal变量，每个线程都会有这个变量的一个副本
    private static final ThreadLocal<Map<String, Object>> USER_THREAD_LOCAL = new ThreadLocal<>();

    /**
     * 将当前用户信息存入ThreadLocal
     * @param userId 用户ID
     * @param userType 用户类型
     */
    public static void setCurrentUser(Integer userId, Integer userType) {
        Map<String, Object> userInfo = new HashMap<>();
        userInfo.put("userId", userId);
        userInfo.put("userType", userType);
        USER_THREAD_LOCAL.set(userInfo);
    }

    /**
     * 获取当前登录用户的ID
     * @return 用户ID，如果未登录则可能返回null
     */
    public static Integer getCurrentUserId() {
        Map<String, Object> userInfo = USER_THREAD_LOCAL.get();
        if (userInfo != null) {
            return (Integer) userInfo.get("userId");
        }
        return null;
    }

    /**
     * 获取当前登录用户的类型
     * @return 用户类型，如果未登录则可能返回null
     */
    public static Integer getCurrentUserType() {
        Map<String, Object> userInfo = USER_THREAD_LOCAL.get();
        if (userInfo != null) {
            return (Integer) userInfo.get("userType");
        }
        return null;
    }

    /**
     * 清理ThreadLocal中的用户信息，在请求处理完成后必须调用此方法
     */
    public static void clear() {
        USER_THREAD_LOCAL.remove();
    }
}